package main

import (
	"bufio"
	"fmt"
	"imooc.com/ccmouse/learngo/functional/fib"
	"io"
	"strings"
)

// go语言特点：给函数实现接口
type intGen func() int

// 函数实现了reader接口
func (g intGen) Read(p []byte) (n int, err error) {
	// 取得下一个元素，调用一下函数即取得下一个元素
	next := g()
	// 控制文件大于10000就不读了
	if next > 10000 {
		return 0, io.EOF
	}
	// 将next转成字符串s并换行
	s := fmt.Sprintf("%d\n", next)
	// 将字符串s读到p字节数组里面
	// TODO：incorrect if p is too small!
	return strings.NewReader(s).Read(p)
}

func printFileContents(reader io.Reader) {
	scanner := bufio.NewScanner(reader)

	// 相当于while
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
}

func main() {
	var f intGen = fib.Fibonacci()
	printFileContents(f)
}
